In recent years, an increasing number of apparatuses employ, in place of a single-core processor system that is a computer equipped with a single central processing unit (CPU), a multi-core processor system that is a computer equipped with plural CPUs. The multi-core processor system assigns plural threads to the plural CPUs in parallel to achieve high-speed data processing. A program is executed in units of threads. As a scheduling method for deciding to which CPU a thread is to be assigned, there exists a technique that performs scheduling such that loads on the CPUs become even.
A conventional technique exists that, in a computer system, saves a thread currently under execution by a CPU in response to an interrupt signal from a device and executes interrupt processing for the interrupt signal. This enables the computer system to improve its response speed to the interrupt signal from the device.
As a technique relevant to a scheduling method taking the interrupt processing into consideration, there is disclosed, for example, a technique that decides a CPU whose thread under execution has a lower priority to be a CPU for performing the interrupt processing. A technique is also disclosed in which a CPU with a lowest interrupt load executes a process having a higher priority (see, e.g., Japanese Laid-Open Patent Publication Nos. 2004-30663, 2006-243864, H9-282188, and 2001-331461).
However, the above conventional techniques encounter a problem that when assigning threads to CPUs such that thread loads become even, thread processing may be delayed in a CPU to which a lot of frequently interrupted threads are assigned. For example, when a thread is executed, a CPU runs in a user mode that is one of execution modes, whereas when interrupt processing is executed, the CPU runs in a kernel mode, so that the thread processing time does not include the interrupt processing time that is processing time for the interrupt processing. Accordingly, there arises a problem that in the CPU to which a lot of frequently interrupted threads are assigned, the thread processing becomes hard to progress and may be delayed depending on the status of execution, leading to a delay in the overall processing.